package com.xingkeduo.util.pojo.base;

import org.springframework.http.server.reactive.ServerHttpRequest;

import com.xingkeduo.util.pojo.exception.AuthorityException;
import com.xingkeduo.util.pojo.exception.BusinessException;
import com.xingkeduo.util.pojo.exception.CommunicationException;
import com.xingkeduo.util.pojo.exception.DataException;
import com.xingkeduo.util.pojo.exception.InputParamException;
import com.xingkeduo.util.pojo.exception.SystemException;
import com.xingkeduo.util.tool.LogUtil;
import com.xingkeduo.util.tool.ReturnUtil;

/**
 * 查询基类
 * 
 * @author GJ
 * @time 2018年12月12日 下午4:09:16
 * @description
 */
public class BaseController {
	protected ReturnUtil returnUtil;

	/**
	 * 异常处理
	 * 
	 * @author GJ
	 * @time 2018年1月22日 上午1:02:09
	 * @param t
	 * @param returnUtil
	 * @return
	 */
	protected String dealException(Throwable t, ReturnUtil returnUtil) {
		String errorCode = null;
		String errorMsg = null;

		if (t instanceof AuthorityException) {
			AuthorityException ae = (AuthorityException) t;
			errorCode = ae.getCode();
			errorMsg = ae.getMessage();

		} else if (t instanceof BusinessException) {
			BusinessException be = (BusinessException) t;
			errorCode = be.getCode();
			errorMsg = be.getMessage();
		} else if (t instanceof InputParamException) {
			InputParamException ie = (InputParamException) t;
			errorCode = ie.getCode();
			errorMsg = ie.getMessage();
		} else if (t instanceof CommunicationException) {
			CommunicationException oe = (CommunicationException) t;
			errorCode = oe.getCode();
			errorMsg = oe.getMessage();
		} else if (t instanceof DataException) {
			DataException de = (DataException) t;
			errorCode = de.getCode();
			errorMsg = de.getMessage();
		} else {
			errorCode = SystemException.getDefaultCode();
			errorMsg = t.getMessage();
		}

		LogUtil.showLog(t);
		return returnUtil.getException(errorCode, errorMsg);
	}

	/**
	 * 异常处理
	 * 
	 * @author GJ
	 * @time 2018年1月22日 上午1:02:09
	 * @param t
	 * @param returnUtil
	 * @return
	 */
	protected void dealException(Throwable t) {
		LogUtil.showLog(t);
	}

	/**
	 * 获取操作人ID
	 * 
	 * @author GJ
	 * @time 2019年1月7日 下午3:00:15
	 * @return
	 */
	protected long getOperator(ServerHttpRequest request) {
		return Long.parseLong(request.getHeaders().getFirst("operator"));
	}
}
